﻿/**
 * 仓储。
 */
Ext.define('Happy.data.Store', {
    extend: 'Ext.data.Store',

    /**
     * @cfg {String} url 加载数据的路径。
     */

    /**
     * @cfg {Array} columns 要显示的列（字段）。
     */

    /**
     * @cfg {Array} arguments 查询参数列表。
     */

    constructor: function (config) {
        var me = this;

        config = config || [];

        me.configQueryRequest(config);

        me.callParent([config]);
    },

    /**
     * 配置服务类型 Happy.Application.Query.QueryRequest 的成员，这些成员会发送到服务器。
     * 
     * @private
     * @param {Object} config
     */
    configQueryRequest: function (config) {
        var me = this;

        me.arguments = new Ext.util.MixedCollection();
        if (config.arguments) {
            me.setArguments(config.arguments);
            delete config.arguments;
        }
    },

    /**
     * 设置查询参数。
     * 
     * @param {Array} args
     * @return {Happy.data.Store}
     */
    setArguments: function (args) {
        var me = this;

        Ext.Array.each(args, function (arg) {
            me.arguments.add(arg.property, arg);
        });

        return me;
    },

    /**
     * 重写 ExtJs，提供几个额外的查询参数支持。
     */
    load: function (options) {
        var me = this;
  
        options = options || {};

        Ext.applyIf(options, {
            url: me.url,
            columns: me.columns,
            arguments: me.arguments.items
        });

        return me.callParent([options]);
    }
});